package com.wn.date20190821;

import java.text.SimpleDateFormat;
import java.util.Date;

import com.wn.date20190820.GetLanIP;
import com.wn.date20190820Socket.ChatServer;
import com.wn.date20190820Socket.SentMsg;
import com.woniuxy.im.Message;

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
import javafx.scene.input.KeyCode;
import javafx.scene.text.Font;
import javafx.stage.Stage;

public class FxApp extends Application
{
	// 服务器
	ChatServer sever;
//	// 发送消息器
	SentMsg msg;

	// 好友窗口
	static FriendsFound friend;
	Button btnFriend = new Button("好友列表");

	Group root = new Group();
	Label localport = new Label("本地端口：");
	TextField lportText = new TextField();
	Label remoteHost = new Label("远程主机：");
	TextField remoteHosText = new TextField();
	Label remotePort = new Label("远程端口：");
	TextField rportText = new TextField();
	Button confirmbtn = new Button("保存");

	// 发送窗口
	Label lblsend = new Label("输入消息");
	TextArea txtSend = new TextArea();
	// 发送按钮
	Button btnSend = new Button("发送");
	// 消息记录
	TextArea txtMsg = new TextArea();
	Label lblmsg = new Label("请选择好友");

	// 判断时候启用监听
	boolean isSeverStarted = false;

	/**
	 * 初始化 控件位置
	 */
	public void initialControl()
	{
		// 本地端口label
		localport.setLayoutX(20);
		localport.setLayoutY(40);
		// 本地端口text 默认12345
		lportText.setLayoutX(100);
		lportText.setLayoutY(40);
		lportText.setText("12345");
		// 远程主机label
		remoteHost.setLayoutX(20);
		remoteHost.setLayoutY(80);
		// 远程主机text
		remoteHosText.setLayoutX(100);
		remoteHosText.setLayoutY(80);
		remoteHosText.setText("192.168.2.171");
		// 远程端口 lbl
		remotePort.setLayoutX(20);
		remotePort.setLayoutY(120);
		// 远程端口txt
		rportText.setLayoutX(100);
		rportText.setLayoutY(120);
		rportText.setText("12345");
		// 保存设置
		confirmbtn.setLayoutX(20);
		confirmbtn.setLayoutY(160);
		// 发送框
		txtSend.setLayoutX(20);
		txtSend.setLayoutY(250);
		txtSend.setMaxSize(300, 200);
		lblsend.setFont(new Font(20));
		lblsend.setLayoutX(20);
		lblsend.setLayoutY(220);
		// 发送按钮
		btnSend.setLayoutX(20);
		btnSend.setLayoutY(470);
		// 消息记录
		txtMsg.setLayoutX(400);
		txtMsg.setLayoutY(60);
		txtMsg.setMinSize(550, 500);
		txtMsg.setMaxSize(550, 500);
		txtMsg.setEditable(false);
		lblmsg.setLayoutX(400);
		lblmsg.setLayoutY(30);
		lblmsg.setFont(new Font(20));

		// 好友窗口按钮
		btnFriend.setLayoutX(870);
		btnFriend.setLayoutY(25);
		// 添加
		root.getChildren().add(localport);
		root.getChildren().add(remoteHost);
		root.getChildren().add(remotePort);
		root.getChildren().add(remoteHosText);
		root.getChildren().add(rportText);
		root.getChildren().add(lportText);
		root.getChildren().add(confirmbtn);
		root.getChildren().add(txtSend);
		root.getChildren().add(lblsend);
		root.getChildren().addAll(btnSend, txtMsg, lblmsg, btnFriend);

	}

	/**
	 * 设置事件
	 */
	public void setEvent()
	{
		// 确定按钮
		confirmbtn.setOnMouseClicked((t) -> {
			///// 初始化聊天
			if(!isSeverStarted) {
				initSever();
			}
			initClient();
		});

		// 发送按钮
		btnSend.setOnMouseClicked(t -> {
			// 判断是否建立连接
			if (!isSeverStarted)
			{
				new Alert(Alert.AlertType.WARNING, "请先绑定端口").show();
			} else
			{
				// 发送消息
				try
				{
					new Thread(() -> {
						try
						{
							sendMsg();
						} catch (Exception e)
						{
							e.printStackTrace();
						}
					}).start();
				} catch (Exception e)
				{
					e.printStackTrace();

					lblmsg.setText("抱歉对方不在线");
				}
			}
		});

		// 消息发送框 按enter发送
		txtSend.setOnKeyPressed(t -> {
			if (!isSeverStarted)
			{
				new Alert(Alert.AlertType.WARNING, "请先绑定端口").show();
			} else
			{
				if (t.getCode() == KeyCode.ENTER)
				{
					try
					{
						sendMsg();
					} catch (Exception e)
					{
						lblmsg.setText("连接失败");
						e.printStackTrace();
					}
				}
			}
		});

		// 好友窗口
		btnFriend.setOnMouseClicked(t -> {
			friend.show();
		});

	}

	/**
	 * 初始化seversocket，socket
	 */
	public void initSever()
	{
		int portLocal = Integer.parseInt(lportText.getText());
		// 启动服务
		sever = new ChatServer(portLocal, txtMsg);
		new Thread(sever).start();
		isSeverStarted = true;
		lportText.setDisable(true);
		System.out.println("服务端已启动监听");
	}

	/**
	 * 初始化发送线程
	 */
	public void initClient()
	{
		int portRemote = Integer.parseInt(rportText.getText());
		String name = remoteHosText.getText();
		// 消息发送启动
		msg = new SentMsg(name, portRemote, this);
		// 按钮不可用
//		confirmbtn.setDisable(true);
		// 显示和谁聊天
//		lblmsg.setText("正在和 "+GetLanIP.getNameByIp(remoteHosText.getText())+" 聊天");
		lblmsg.setText("正在和 " + remoteHosText.getText() + " 聊天");
	}
	
	

	/**
	 * 发送消息
	 * 
	 * @throws Exception
	 */
	public void sendMsg()
	{
		String s = txtSend.getText().trim();
		if (s.length() > 0)
		{
			// 发送消息
			try
			{
				msg.send(s);
			} catch (Exception e)
			{
				lblmsg.setText("连接失败");
				e.printStackTrace();
			}
			// 清空消息框，添加消息记录
			txtSend.setText("");
			txtMsg.appendText("\n我 在" + new SimpleDateFormat("yyyy-MM-dd :hh:mm:ss").format(new Date()) + " 说：");
			txtMsg.appendText("\n" + s + "\n");
		}
	}

	/**
	 * start
	 */
	@Override
	public void start(Stage primaryStage) throws Exception
	{
		initialControl();
		setEvent();
		// 窗口宽度
		Scene scene = new Scene(root, 1000, 600);
		primaryStage.setScene(scene);
		primaryStage.setTitle("LanIM");
		// 好友,传入主界面，方便控制
		friend = new FriendsFound(this);
		friend.show();
		primaryStage.show();
		// 本地ip
//		GetLanIP.getLocalIP();
		// 注册到laotan
		addLT();
		
	}

	public static void main(String[] args)
	{
		launch(args);

	}

	public void setMsg(String s)
	{
		lblmsg.setText(s);
	}
	/**
	 * 注册
	 */
	public void addLT()
	{
		Message m=new Message();
		m.setFrom(GetLanIP.getLocalIP());
		m.setTo("192.168.2.121");
		m.setContent("ping");
		new Reg(m).start();
		System.out.println("连接老谭");
	}
	
	
	
//	/** uselesss
//	 * 回收socket
//	 */
//	public void recycleSocket()
//	{
//		if(sever!=null)
//		{
//			sever.setClose(true);
//		}
//		
//	}
}
